/**
 * 目标：基于 Web 服务，开发-省份列表数据接口
 * 步骤：
 *  1. 创建 Web 服务
 *  2. 使用 req.url 获取请求的资源路径，读取 json 文件数据返回
 *  3. 其他请求的路径，暂时返回不存在的提示
 *  4. 运行 Web 服务，用浏览器请求地址查看效果
 */

// 前后端联调，常见问题：
//  1. 没有响应 res.end()
//  2. 路径不匹配，一直提示资源不存在
//     3.1 前端路径错
//     3.2 后端路径错
//  3. toString 方法忘记小括号调用，返回的不是字符串
//  4. 变成了下载 json 文件，文件类型不匹配

// 1. 创建 Web 服务
const http = require('http')
const fs = require('fs')
const path = require('path')
const qs = require('querystring')
const server = http.createServer()

// 2. 使用 req.url 获取请求的资源路径，读取 json 文件数据返回
server.on('request', (req, res) => {
  // req 请求对象，res 响应对象
  console.log('req.url', req.url)
  // 判断请求路径是否为 '/api/province'
  if (req.url === '/api/province') {
    // 读取文件
    const data = fs.readFileSync(path.join(__dirname, './data/province.json'))
    // 设置响应头，json 格式，编码为 utf-8
    res.setHeader('content-type', 'application/json;charset=utf-8')
    // 响应客户端
    res.end(data.toString())
  }
  // .startsWith 以什么字符串开头
  else if (req.url.startsWith('/api/city')) {
    // ------- 后端处理路径和参数 -------
    // 把 url 路径截成两部分
    const queryStr = req.url.split('?')[1]
    // 把查询字符串转成对象，需要导入模块 const qs = require('querystring') 
    const queryObejct =  qs.parse(queryStr)
    // 设置响应头，json 格式，编码为 utf-8
    res.setHeader('content-type', 'application/json;charset=utf-8')
    // ------- 后端读取文件并返回 -------
    // 读取文件，数据类型为 buffer
    const data = fs.readFileSync(path.join(__dirname, './data/city.json'))
    // 把 buffer 转成 对象 
    const cityObject = JSON.parse(data.toString())
    // 获取对应省份的城市列表
    const cityList = cityObject[queryObejct.pname]
    // 响应客户端，🔴 注意：只能响应 buffer 或 JSON 字符串
    res.end(JSON.stringify(cityList))
  }
  else {
    // 资源不存在提示
    res.setHeader('content-type', 'text/html;charset=utf-8')
    res.end('<h1>资源不存在</h1>')
  }
})

// 启用 Web 服务，如果端口被占用，会报错，先停止之前的服务
server.listen(3000, () => {
  console.log('服务启动成功，端口号为：3000')
})